package love.yuanmengrobot.als.business.servlet;


import com.google.gson.Gson;
import love.yuanmengrobot.als.business.dao.impl.ImportPlainDaoImpl;
import love.yuanmengrobot.als.business.javaBean.Alstrainplan;
import love.yuanmengrobot.als.business.javaBean.Alstrainplancourse;
import love.yuanmengrobot.als.business.javaBean.Major;
import love.yuanmengrobot.als.business.util.ReaderPl;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

public class importPlanServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    // 上传文件存储目录
    private static final String UPLOAD_DIRECTORY = "upload";

    // 上传配置
    private static final int MEMORY_THRESHOLD = 1024 * 1024 * 3;  // 3MB
    private static final int MAX_FILE_SIZE = 1024 * 1024 * 40; // 40MB
    private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 50; // 50MB
    List<String> fileList;

    /**
     * 上传数据及保存文件
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        String op = request.getParameter("op");
        String majorId = request.getParameter("majorid");

        String trainplain = request.getParameter("trainplain");
        String majorName = request.getParameter("majorname");

        System.out.println("操作："+op);
//        if ("submitfile".equals(op)) {
//            System.out.println("上传文件---");
//            fileList = new ArrayList<String>();
//            String uploadPath = request.getServletContext().getRealPath("./") + File.separator + UPLOAD_DIRECTORY;
//            uploadPath = uploadPath.replace("\\\\", "\\");
//            uploadPath = uploadPath.replace("\\", "\\\\");
//            File file = new File(uploadPath);
//            outFiles(file);
//            request.setAttribute("fileList", fileList);
//            request.getRequestDispatcher("WEB-INF/view/business/importDataPlan/importDataPlan.jsp").forward(request, response);
////
//        }
//        {
//            trainplanId, majorId, grade, optionalCredit, limiteCredit,
//                    professionalRequired, generalRequired, generalElective,
//                    disciplineBasis, practiceLink
//        }
        if ("updateplain".equals(op)) {
            String trainplanId = request.getParameter("trainplanId");
            majorId = request.getParameter("majorId");
            String grade = request.getParameter("grade");
            String optionalCredit = request.getParameter("optionalCredit");
            String limiteCredit = request.getParameter("limiteCredit");
            String professionalRequired = request.getParameter("professionalRequired");
            String generalRequired = request.getParameter("generalRequired");
            String generalElective = request.getParameter("generalElective");
            String disciplineBasis = request.getParameter("disciplineBasis");
            String practiceLink = request.getParameter("practiceLink");
            Alstrainplan alstrainplan = new Alstrainplan();
            alstrainplan.setTrainplanId(trainplanId);
            alstrainplan.setMajorId(majorId);
            alstrainplan.setGrade(grade);
            alstrainplan.setOptionalCredit(optionalCredit);
            alstrainplan.setLimiteCredit(limiteCredit);
            alstrainplan.setProfessionalRequired(professionalRequired);
            alstrainplan.setGeneralRequired(generalRequired);
            alstrainplan.setGeneralElective(generalElective);
            alstrainplan.setDisciplineBasis(disciplineBasis);
            alstrainplan.setPracticeLink(practiceLink);
            updatePlain(alstrainplan);
            request.setAttribute("plain", getAllPlain(majorId));
        }
        if ("addmajor".equals(op)) {
            insertMajor(majorName);
        }
        if ("updatemajor".equals(op)) {
            updateMajor(majorId, majorName);
        }  if ("updateplaincourse".equals(op)) {
            Alstrainplancourse alstrainplancourse=new Alstrainplancourse();
            alstrainplancourse.setTrainplancourseId(request.getParameter("trainplancourseIdup"));
            alstrainplancourse.setTrainplanId(request.getParameter("trainplanIdcup"));
            alstrainplancourse.setCourseName(request.getParameter("courseNameup"));
            alstrainplancourse.setPlanCourseTerm(request.getParameter("planCourseTermup"));
            alstrainplancourse.setCredit(request.getParameter("creditup"));
            alstrainplancourse.setCourseType(request.getParameter("courseTypeup"));
            alstrainplancourse.setCourseHours(request.getParameter("courseHoursup"));
            alstrainplancourse.setCourseLevel(request.getParameter("courseLevelup"));
            updatePlainCourse(alstrainplancourse);
        }

        request.setAttribute("AllMajor", getAllMajor());

        if ("getAllPlain".equals(op) && majorId != null) {
            request.setAttribute("plain", getAllPlain(majorId));
        }
        if ("getAllPlainCourse".equals(op)) {//TRAINPLAN_ID
            request.setAttribute("plain", getAllPlain(majorId));
            request.setAttribute("plaincourse", getAllPlainCourse(trainplain));
        }


        request.getRequestDispatcher("WEB-INF/view/business/importDataPlan/importDataPlan.jsp").forward(request, response);
    }


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setAttribute("AllMajor", getAllMajor());
        request.getRequestDispatcher("WEB-INF/view/business/importDataPlan/importDataPlan.jsp").forward(request, response);
    }

    public int insertMajor(String name) {
        ImportPlainDaoImpl importPlainDao = new ImportPlainDaoImpl();
        return importPlainDao.insertMajor(name);
    }

    public int updateMajor(String majorid, String majorname) {

        ImportPlainDaoImpl importPlainDao = new ImportPlainDaoImpl();
        return importPlainDao.updateMajorById(majorid, majorname);
    }

    public int updatePlain(Alstrainplan alstrainplan) {
        ImportPlainDaoImpl importPlainDao = new ImportPlainDaoImpl();
        return importPlainDao.updateAlstrainplainById(alstrainplan);
    }
    public int updatePlainCourse(Alstrainplancourse alstrainplancourse){
        ImportPlainDaoImpl importPlainDao = new ImportPlainDaoImpl();
        return importPlainDao.updateAlstrainplancourseByAlstrainplancourse(alstrainplancourse);

    }

    public ArrayList<Major> getAllMajor() {
        ImportPlainDaoImpl importPlainDao = new ImportPlainDaoImpl();
        ArrayList<Major> arrayList = importPlainDao.selectAllMajor();

        return arrayList;
    }

    public ArrayList<Alstrainplan> getAllPlain(String majorId) {
        ImportPlainDaoImpl importPlainDao = new ImportPlainDaoImpl();
        ArrayList<Alstrainplan> arrayList = importPlainDao.selectAllAlstrainplain(majorId);

        return arrayList;
    }

    public ArrayList<Alstrainplancourse> getAllPlainCourse(String trainplain) {
        ImportPlainDaoImpl importPlainDao = new ImportPlainDaoImpl();
        ArrayList<Alstrainplancourse> arrayList = importPlainDao.selectAllAlstrainplancourse(trainplain);


        return arrayList;
    }

//    {
//
//        fileList = new ArrayList<String>();
//        String uploadPath = request.getServletContext().getRealPath("./") + File.separator + UPLOAD_DIRECTORY;
//        uploadPath = uploadPath.replace("\\\\", "\\");
//        uploadPath = uploadPath.replace("\\", "\\\\");
//        File file = new File(uploadPath);
//        outFiles(file);
//        request.setAttribute("fileList", fileList);
//        request.getRequestDispatcher("WEB-INF/view/business/importDataPlan/importDataPlan.jsp").forward(request, response);
//
//    }
//


//    public void upFile(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        // 检测是否为多媒体上传
//        if (!ServletFileUpload.isMultipartContent(request)) {
//            // 如果不是则停止
//            PrintWriter writer = response.getWriter();
//            writer.println("Error: 表单必须包含 enctype=multipart/form-data");
//            writer.flush();
//            return;
//        }
//
//        // 配置上传参数
//        DiskFileItemFactory factory = new DiskFileItemFactory();
//        // 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中
//        factory.setSizeThreshold(MEMORY_THRESHOLD);
//        // 设置临时存储目录
//        factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
//
//        ServletFileUpload upload = new ServletFileUpload(factory);
//
//        // 设置最大文件上传值
//        upload.setFileSizeMax(MAX_FILE_SIZE);
//
//        // 设置最大请求值 (包含文件和表单数据)
//        upload.setSizeMax(MAX_REQUEST_SIZE);
//
//        // 中文处理
//        upload.setHeaderEncoding("UTF-8");
//
//        // 构造临时路径来存储上传的文件
//        // 这个路径相对当前应用的目录
//        String uploadPath = request.getServletContext().getRealPath("./") + File.separator + UPLOAD_DIRECTORY;
//
//
//        // 如果目录不存在则创建
//        File uploadDir = new File(uploadPath);
//        if (!uploadDir.exists()) {
//            uploadDir.mkdir();
//        }
//
//        try {
//
//            // 解析请求的内容提取文件数据
//            @SuppressWarnings("unchecked")
//            List<FileItem> formItems = upload.parseRequest(request);
//
//            if (formItems != null && formItems.size() > 0) {
//                // 迭代表单数据
//                for (FileItem item : formItems) {
//                    // 处理不在表单中的字段
//                    if (!item.isFormField()) {
//                        String fileName = new File(item.getName()).getName();
//                        String filePath = uploadPath + File.separator + fileName;
//
//                        String filePath2 = uploadPath + File.separator + fileName;
//                        filePath2 = filePath2.replace("\\\\", "\\");
//                        filePath2 = filePath2.replace("\\", "\\\\");
//                        File storeFile = new File(filePath);
//                        // 在控制台输出文件的上传路径
//                        System.out.println(filePath2);
//
//
//                        // 保存文件到硬盘
//                        item.write(storeFile);
//                        request.setAttribute("message",
//                                "文件上传成功!");
//
////                        String str = filePath2.replace("\\", "\\\\");
//
//                        ReaderPl re = new ReaderPl();
//                        re.readPlan(filePath2);
////                        List<List<Object>> lob = rd.readExcel(new File(filePath2));
////
////                        for (int i = 1; i < lob.size(); i++) {
////                            List<Object> lo = lob.get(i);
////                            for (int j=0; j<lo.size();j++){
//////                                lo.get(j)).trim();
////                                System.out.println(String.valueOf(lo.get(j)).trim());
////                            }
////                        }
//
//                    }
//                }
//            }
//        } catch (Exception ex) {
//            request.setAttribute("message",
//                    "错误信息: " + ex.getMessage());
//        }
//    }
//
//
//    public void outFiles(File list) {
//        if (list.isDirectory()) {//检测到根存在分支
//
//            File files[] = list.listFiles();//将根变成数组，遍历根的分支
//            for (int i = 0; i < files.length; i++) {//该for循环导致outFiles方法会检索到该层文件夹的所有文件与文件夹
//                outFiles(files[i]);//进入新的文件根地址
//            }
//        } else {
//            fileList.add(list.getName());
//            System.out.println(list + "   这是个文件");
//        }
//    }

}
